//public class Outclass{
//    //成员位置定义，未被static修饰-实例内部类
//    public class Innerclass1{
//    }
//
//    //成员位置定义，被static修饰-静态内部类
//    static class Innerclass2{
//
//    }
//
//    public void method(){
//        //方法中也可以定义内部类-局部内部类，几乎不用
//        class Innerclass3{
//
//        }
//    }
//}

//public class OutClass {
//    public static void main(String[] args) {
//        System.out.println("jha ");
//    }
//}

//public class OutClass {
//    private int a;
//    static int b;
//    int c ;
//    public void methodA(){
//        a=10;
//        System.out.println(a);
//    }
//
//    public static void methodB(){
//        System.out.println(b);
//    }
//
//    //实例内部类：未被static修饰
//    class InnerClass{
//        int c;
//        public void methodInner(){
//            //在实例内部类中可以直接访问外部类中：任意访问限定符修饰的成员
//            a = 100;
//            b = 200;
//            methodA();
//            methodB();
//
//            //如果外部类和实例内部类中具有相同名称的成员时，优先访问的是内部类自己的
//            c = 300;
//            System.out.println(c);
//            //输出300
//
//            //如果要访问外部类同名成员时，必须：外部类名称.this.同名成员名字
//            OutClass.this.c = 400;
//            System.out.println(OutClass.this.c);
//            //输出400
//        }
//    }
//
//    public static void main(String[] args) {
//        //外部类：对象创建以及成员访问
//        OutClass outClass = new OutClass();
//        System.out.println(outClass.a);
//        System.out.println(OutClass.b);
//        System.out.println(outClass.c);
//        outClass.methodA();
//        OutClass.methodB();
//
//        //创建实例内部类对象
//        OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();
//        //这样写比较奇怪，也可以先将外部类对象先创建出来，然后再实例化内部类对象
////        OutClass outClass = new OutClass();
//        OutClass.InnerClass innerClass2 = outClass.new InnerClass();
//        innerClass2.methodInner();
//        System.out.println("haha");
//    }
//}

//public class OutClass {
//    private int a;
//    static int b;
//    public void methodA(){
//        a=10;
//        System.out.println(a);
//    }
//
//    public static void methodB(){
//        System.out.println(b);
//    }
//
//    //静态内部类：被static修饰的成员内部类
//    static class InnerClass{
//        public void methodInner(){
//            //在静态内部类中只能访问外部类的静态成员
//            //a = 100; 编译失败a不是类成员变量
//            b = 200;
//            //methodA(); 编译失败，不是静态方法
//            methodB();
//            OutClass outClass = new OutClass();
//            System.out.println(outClass.a);
//        }
//    }
//
//    public static void main(String[] args) {
//        //静态内部类对象创建&成员访问
//        OutClass.InnerClass innerClass = new OutClass.InnerClass();
//        innerClass.methodInner();
//    }
//}

//public class OutClass {
//    int a;
//    public void methodd(){
//        int b = 10;
//
//        //局部内部类:定义在方法内部
//        //不能被public，static等访问限定符修饰
//        class InnerClass{
//            public void methodInnerClass(){
//                System.out.println(a);
//                System.out.println(b);
//            }
//        }
//
//        //只能在方法体内部使用，其他位置不能用
//        InnerClass innerClass = new InnerClass();
//        innerClass.methodInnerClass();
//    }
//    public static void main(String[] args) {
//        //OutClass.InnerClass innerClass = null; 编译失败
//    }
//}
